package modelo;

import java.util.List;

import javax.persistence.*;

/**
 * 
 * @author douglas_joaquim
 * @author matheus_campos
 */

@NamedQueries({
	@NamedQuery(name = "Jogador.buscarTodos", query = "SELECT j FROM Jogador j "),
	@NamedQuery(name = "Jogador.buscarPorEquipe", query = "SELECT j FROM Jogador j WHERE j.equipe.nome = :equipe"),
	@NamedQuery(name = "Jogador.buscarPorNome", query = "SELECT j FROM Jogador j WHERE j.nome like :nome"),
	@NamedQuery(name = "Jogador.buscarPorPosicao", query = "SELECT j FROM Jogador j WHERE j.posicao = :posicao"),
	@NamedQuery(name = "Jogador.buscarPorNumero", query = "SELECT j FROM Jogador j WHERE j.numero = :numero")
})
@Entity
public class Jogador {
	@Id
	@GeneratedValue
	private long id;
	
	@Column(length = 100, nullable = false )
	private String nome;
	
	@Column(length = 100, nullable = false )
	private String posicao;
	
	@Column(nullable = false)
	private int numero;
	
	@ManyToOne(optional = false)
	@JoinColumn(name = "idEquipe")
	private Equipe equipe;
	
	@OneToMany(mappedBy="jogador")
	private List<Gol> gols;

	/**
	 * @param id
	 * @param nome
	 * @param posicao
	 * @param numero
	 * @param equipe
	 * @param gols
	 */
	public Jogador(long id, String nome, String posicao, Integer numero,
			Equipe equipe, List<Gol> gols) {
		super();
		this.id = id;
		this.nome = nome;
		this.posicao = posicao;
		this.numero = numero;
		this.equipe = equipe;
		this.gols = gols;
	}

	public Jogador() {
		super();
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getPosicao() {
		return posicao;
	}

	public void setPosicao(String posicao) {
		this.posicao = posicao;
	}

	public Integer getNumero() {
		return numero;
	}

	public void setNumero(Integer numero) {
		this.numero = numero;
	}

	public Equipe getEquipe() {
		return equipe;
	}

	public void setEquipe(Equipe equipe) {
		this.equipe = equipe;
	}

	public List<Gol> getGols() {
		return gols;
	}

	public void setGols(List<Gol> gols) {
		this.gols = gols;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((equipe == null) ? 0 : equipe.hashCode());
		result = prime * result + ((gols == null) ? 0 : gols.hashCode());
		result = prime * result + (int) (id ^ (id >>> 32));
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result + numero;
		result = prime * result + ((posicao == null) ? 0 : posicao.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Jogador other = (Jogador) obj;
		if (equipe == null) {
			if (other.equipe != null)
				return false;
		} else if (!equipe.equals(other.equipe))
			return false;
		if (gols == null) {
			if (other.gols != null)
				return false;
		} else if (!gols.equals(other.gols))
			return false;
		if (id != other.id)
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (numero != other.numero)
			return false;
		if (posicao == null) {
			if (other.posicao != null)
				return false;
		} else if (!posicao.equals(other.posicao))
			return false;
		return true;
	}

	
	
	
	

}
